package com.qf.program.service;

import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.db.Db;
import cn.hutool.db.Entity;
import com.qf.common.utils.CheckUtil;
import com.qf.utils.SmallTool;
import lombok.SneakyThrows;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class CreatePmidList {

    // 数据进行抓取 3000万以后的 目前最大是 pmid 37743098
    // 37992794
    // 38016021
    // 38052031
    // 38382148
    // 38467040
    // 38490949
    // 38618938
    // 38710121
    // 38797871
    // 38973025
    // 39059031
    // 39180786
    // 39367739
    // 39418082
    // 39484021
    // 39507540
    // 39561440
    // 39571576
    // 39763006
    // 39800880
    // 39903899
    // 39930552
    // 40001090
    public static int startIndex = 39900;
    public static int endIndex = 40001;


    @SneakyThrows
    public void updatePmidList(Integer startIndex, Integer endIndex) {
        this.startIndex = startIndex;
        this.endIndex = endIndex;

        String[] args = new String[]{""};
        boolean isFirst = true;
        if (isFirst) {
            String table = "xml_ids";
            Db use = Db.use();
            // 校验上次有没有结束
            List<Entity> list = use.query("SELECT count(1) as co FROM " + table + " where flag = -1");
            if (list.size() > 0) {
                Entity entity = list.get(0);
                Integer co = entity.getInt("co");
                if (co.intValue() > 0) {
                    CheckUtil.check(false,"上次未结束 等待结束");
                }
            }
            SmallTool.printMemory();
            use.execute("truncate table " + table);
            for (int i = startIndex; i < endIndex; i++) {
                List<Integer> ids = new ArrayList<>();
                Integer start = i * 1000 + 1;
                Integer stop = (i + 1) * 1000;
                for (int t = start; t <= stop; t++) {
                    ids.add(t);
                }
                List<List<Integer>> split = ListUtil.split(ids, 100);
                for (List<Integer> integers : split) {
                    Db.use().insert(Entity.create(table)
                            .set("fromid", start)
                            .set("toid", stop)
                            .set("pmids", StrUtil.join(",", integers.toString())));
                }
            }
        }
        PubmedXmlLocal.main(args);
    }

}
